#include <bits/stdc++.h>
using namespace std;

int n, k, p, sqmax, maxsum;
vector<int> sq, ans , last;

int init() {
	ans.reserve(k);
	last.reserve(k);
	int sum = 1;
	maxsum = 0;
	sqmax = 1;
	sq.push_back(0);
	while (sum <= n) {
		sum = 1;
		for (int i = 0; i < p; ++i) {
			sum *= sqmax;
		}
		sq.push_back(sum);
		sqmax++;
	}
	sqmax--;
	for (int i = 1; i <= sqmax; ++i) {
		if (n * sq[i] > n)
			return sq[i];
	}
}

int dfs(int n, int k, int sqm, int sum) {
	int re = 0;
	if (n < 0)
		return re;
	if (k == 0) {
		if(n)
			return re;
		else {
			if (sum > maxsum) {
				last = ans;
				maxsum = sum;
			}
			return re = 1;
		}
	}
	for (int i = sqm; i > 0; --i) {
		ans.push_back(i);
		re += dfs(n - sq[i], k - 1, i, sum + i);
		ans.pop_back();
	}
	return re;
}

int main() {
	scanf("%d%d%d", &n, &k, &p);
	init();
	int re = dfs(n, k, sqmax, 0);
	if (re) {
		printf("%d =", n);
		for (int i = 0; i < k; i++) {
			if (i)
				printf(" +");
			printf(" %d^%d", last[i], p);
		}
	}
	else {
		printf("Impossible\n");
	}
return 0;
}